/*
 * @Author: LibraStalker 1299640057@qq.com
 * @Date: 2023-01-27 23:44:51
 * @FilePath: interface.ts
 * @Description: 所有的接口
 */

import {Landmark68} from "../modelSDK/landmark68";

/**
 * 在人脸框检测的基础上所有支持的额外检测负载，目前只有一个68关键点检测，后续可以扩展，比如增加表情识别等
 */
export const all_supported_face_field = {
    landmark68: Landmark68
};

// 提供给模型的输入的形状
export interface FeedShape {
    // 通道数
    fc: number;
    // 宽度
    fw: number;
    // 高度
    fh: number;
}

export interface ModelConfig {
    // 模型的路径，可以为相对路径或网络URL
    modelPath?: string;
    // 输入的图像转化成0-1之间的浮点数后的三个通道的平均值，预处理时对输入标准化时用到
    mean?: number[];
    // 输入的图像转化成0-1之间的浮点数后的三个通道的标准差，预处理时对输入标准化时用到
    std?: number[];
    // 提供给模型的输入的形状
    feedShape?: FeedShape; // 因为有的模型里自带了这个参数所以这个参数不是必需的
}

// 输入图像的原始宽度和高度
export interface NaturalSize {
    naturalWidth: number;
    naturalHeight: number;
}

// 人脸框的位置，左、上、宽、高
export interface Location {
    // 人脸图片的左边界与原始图片的左边界的像素距离，一般为非负数
    left: number;
    // 人脸图片的上边界与原始图片的上边界的像素距离，一般为非负数
    top: number;
    // 人脸图片的像素宽度，正数
    width: number;
    // 人脸图片的像素高度，正数
    height: number;
}

// 关键点相对于原始图片的坐标，x横坐标，y纵坐标，单位为像素
export interface Coordinate {
    x: number;
    y: number;
}

// 模型最终的返回结果，API命名参考：https://ai.baidu.com/sdk
export interface FaceInfo {
    // 人脸框的位置，左上宽高
    location: Location;
    // 人脸框的置信度
    face_probability: number;
    // 68个人脸关键点的坐标
    landmark68?: Coordinate[];
}